// pages/questionnaire/questionnaire.js
const app = getApp();
Page({
	data: {
		sid     : 0,
		dataList: [],   //题目列表
		dataQn  : {},   //问卷信息
		pageType: 1,    //标记当前页面的状态，1是显示问题内容，0是提交数据之后，显示结果内容
		nextSid : 0,     //用于判断显示高级问卷按钮的参数跳转
		nextPrice:0,
		computedLevel:'X', //结果的评分


		//支付必需参数，下单时。支付结束后需要。成功则id查在入库。失败则id还原票。思路查看流程图
		obj: {
			id: '', //展会id。eid是ticket表里与展会id映射的名字。id展会表。eid门票表
			price: 0, //金额
			body: '', //体内容
			number: '', //选择的数量
			pay_id: '', //预支付id
			out_trade_no: '', //下单反馈的商户订单号！寄存单号，在支付结束后，需要做后续处理！便于解决对t线程控制。思路查看流程图
			openid: wx.getStorageSync('openid'), //下单时，使用的openid
			unionid: wx.getStorageSync('unionid'), //预留的unionid
		},
		//按钮是否可用，点击购买时，按钮不可用。支付完毕，在松开
		buttonSatet: false,
	},
	onLoad: function (options) {
		let that = this
		// 用于开发时，直接进入本页没有带sid参数的报错，但实际使用中是会带参数进来的
		Object.keys(options).length >0 && this.setData({ sid: options.sid }) 
		// 请求题库
		this.loadQuestionNaire();
	},
	/////////////////////////////////////////////// 支付相关 ///////////////////////////////////////////
	/////////////////////////////////////////////// 支付相关 ///////////////////////////////////////////
	/////////////////////////////////////////////// 支付相关 ///////////////////////////////////////////
	/**
     * 步骤一：获得预支付订单号prepay_id。
     * 备注：于小程序来说，深究GET与POST无意义了。详情参见GET与POST各自的用武之地。在小程序体现不了。
     */
	initPrepay: function (resobj) {
		wx.showLoading({
			title: '支付准备中',
		})

        /**
         * 选择的数量，与金额设置上去。此处多做了一步price金额参数传递。哪里计算都一样
         */
		console.log(resobj.currentTarget.dataset.price)
		this.setData({
			["obj.price"]: resobj.currentTarget.dataset.price,
			["obj.number"]: resobj.currentTarget.dataset.number,
			buttonSatet: true,
		})

		console.log('支付请求的数据:')
		console.log(this.data.obj)

        /**
         * 请求服务器下单
         */
		wx.request({
			url: appjs.data.server_request_baseUrl + 'wxchat_xiadan',
			data: {
				obj: JSON.stringify(thisObj.data.obj),
			},
			method: 'POST',
			header: {
				'content-type': 'application/x-www-form-urlencoded',
				secure: '423da4b1ef7ced353f986e376fff898e'
			},
			success(res) {
				console.log("prepay预支付:")
				console.log(res);

				//下单失败，在弹出Model框后，松开按钮。按钮可点击
				if (res.data.state == 'FAIL') {
					wx.hideLoading();
					thisObj.myShowModel(res.data.detail)
					thisObj.looksen();
				} else {
					//下单成功。松开按钮，在支付结束后在松开！调起微信的时间约1S，用户在这个时间内，又跑去按下单无意义。
					thisObj.setData({
						["obj.out_trade_no"]: res.data.out_trade_no,
						["obj.pay_id"]: res.data.prepay_id,
					})
					thisObj.sign();
				}
			},
			fail() {
				thisObj.myShowModel('请求超时')
			}
		})
	},

    /**
     * 步骤二： 签名
     */
	sign() {
		var that = this;
		wx.request({
			url: appjs.data.server_request_baseUrl + 'wechat_qianming',
			method: 'POST',
			header: {
				'content-type': 'application/x-www-form-urlencoded'
			},
			data: {
				'repay_id': thisObj.data.obj.pay_id
			},
			success: function (res) {
				console.log("sign签名:")
				console.log(res);
				thisObj.payFun(res.data);
			}
		})
	},

    /**
     * 步骤三：向微信内部发起支付请求
     */
	payFun: function (obj) {
		wx.hideLoading();

		wx.requestPayment({
			'timeStamp': obj.timeStamp,
			'nonceStr': obj.nonceStr,
			'package': obj.package,
			'signType': obj.signType,
			'paySign': obj.paySign,
			// 支付成功调用
			success: function (res) {
				console.log("支付成功调用..........")
				console.log(res)
				wx.showToast({
					title: '支付成功!',
				})
				thisObj.follow("SUCCESS");
			},
			// 支付失败调用
			fail: function (res) {
				console.log("支付失败调用..........")
				console.log(res)
				thisObj.follow("FAIL");
				thisObj.myShowModel('支付失败!');
			}
		})
	},
	/**
	* 调起支付后的后续处理，不论支付成功还是支付失败，成功写入自己的门票信息。失败，还原门票数量
	*/
	follow: function (reqstate) {
		this.looksen();

		console.log('后续处理被调起')
		//如果支付成功，则向自己的门票写入数据。如果支付失败，则回退门票。此处必需要商户id。与展会id。信息去查，没有从小程序获得
		wx.request({
			url: appjs.data.server_request_baseUrl + 'wechat_complete',
			method: 'POST',
			data: {
				obj: JSON.stringify(thisObj.data.obj),
				state: reqstate,
			},
			header: {
				'content-type': 'application/x-www-form-urlencoded',
				secure: 'd9a22d7a8178d5b42a8750123cbfe5b1'
			},
			success(res) {
				if (reqstate == 'SUCCESS') {
					//使用navigateTo跳转到门票我的门票页面,便于按返回键回来查看购买信息和我的票据
					wx.navigateTo({
						url: '/pages/ticket/ticket',
					})
				}
			}
		})
	},

	/////////////////////////////////////////////// 问卷相关 ///////////////////////////////////////////
	/////////////////////////////////////////////// 问卷相关 ///////////////////////////////////////////
	/////////////////////////////////////////////// 问卷相关 ///////////////////////////////////////////

	//加载题目列表
	loadQuestionNaire() { 
		wx.showLoading({ title: '正在加载中',mask:true})
		wx.request({
			url   : `${app.globalData.server_request_baseUrl}/qn_questionList.php`,
			method: "GET",
			data  : { sid: this.data.sid },
			header: { 'Content-Type': 'application/json' },
			success: res => {
				this.setData({
					pageType     : 1,        // 状态改为显示结果
					nextSid      : 0,       // 对应的高级题库id
					nextPrice    : 0,     // 对应的高级题库的价格
					computedLevel: '清空评价',  // 评价
					dataQn: res.data.dataQn,
					dataList: res.data.dataList,
				})
				wx.hideLoading()
			}
		})
	},
	// 提交问卷
	formSubmit(e) {
		let that  = this
		
		wx.showLoading({title:'评分中...',mask:true})
		//把问卷的信息顺便提交到后台，省得后台再处理一次
		let submitData  = Object.assign(
			this.data.dataQn,
			{unionid:wx.getStorageSync('unionid')},
			{openid:wx.getStorageSync('openid')},
			{submitData:JSON.stringify(e.detail.value).replace(/["{}]/gi,'')}
		);
		// console.log('form发生了submit事件，携带数据为：', e.detail.value)
		console.log('这是要提交的数据：',submitData);
		// 提交数据
		wx.request({
			url   : `${app.globalData.server_request_baseUrl}qn_submit.php`,
			method: "POST",
			data  : submitData,
			header: {'content-type': 'application/x-www-form-urlencoded'},
			success: function(res) {
				console.log(res.data)
				setTimeout(() => {
					that.setData({
						pageType     : 0,                      // 状态改为显示结果
						dataList     : [],                     // 清空问题列表
						dataQn       : {},                     // 清空问卷信息
						nextSid      : res.data.nextSid,       // 对应的高级题库id
						nextPrice    : res.data.nextPrice,     // 对应的高级题库的价格
						computedLevel: res.data.computedLevel  // 评价
					})
					wx.hideLoading()
				}, 500);	
			}
		})
	},
	//跳转到高级问卷
	paytoAdv(event){
		let sid = event.currentTarget.dataset.advsid
		console.log('要跳往高级题库的id', sid)
		//这里处理支付

		//切换高级题库
		this.setData({
			sid: sid
		}, () => { 
			console.log('支付成功，读取了高级题库')
			this.loadQuestionNaire()
		})
		
		// 跳转到高级题库
		// wx.redirectTo({
		// 	url: `/pages/questionnaire/questionnaire?sid=${sid}`,
		// })

	},
	// 重新填写
	formReset() {
		console.log('form发生了reset事件')
	},
	/////////////////////////////////////////////// 其它 事件 ///////////////////////////////////////////
	/////////////////////////////////////////////// 其它 事件 ///////////////////////////////////////////
	/////////////////////////////////////////////// 其它 事件 ///////////////////////////////////////////
	// 分享
	onShareAppMessage: function (res) {
		return {
			title: '分享法管小程序',
			path: '/pages/intro/intro',
			imageUrl: `${app.globalData.server_Url}/weapp_res/share.png`,  //用户分享出去的自定义图片大小为5:4,
			success: function (res) {
			// 转发成功
				wx.showToast({
					title: "分享成功",
					icon: 'success',
					duration: 2000
				})
			},
			fail: function (res) { },
		}
	},
	// 松开按钮，按钮可点击
	looksen: function () {
		this.setData({
			buttonSatet: false,
		})
	},
	//弹窗消息显示
	myShowModel: function (msg) {
		wx.showModal({
			title: '提示',
			showCancel: false,
			content: msg,
		})
	}
})